package com.wgh.product.converter;

import com.wgh.product.dto.ProductAttributeDTO;
import com.wgh.product.entity.shop.ProductAttribute;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * 商品属性转换器
 * 用于ProductAttribute实体和ProductAttributeDTO之间的转换
 */
@Component
public class ProductAttributeConverter {

    /**
     * 将ProductAttribute实体转换为ProductAttributeDTO
     * @param productAttribute ProductAttribute实体
     * @return ProductAttributeDTO
     */
    public ProductAttributeDTO toDTO(ProductAttribute productAttribute) {
        if (productAttribute == null) {
            return null;
        }
        
        ProductAttributeDTO productAttributeDTO = new ProductAttributeDTO();
        productAttributeDTO.setId(productAttribute.getId());
        productAttributeDTO.setName(productAttribute.getName());
        productAttributeDTO.setType(productAttribute.getType());
        productAttributeDTO.setCategoryId(productAttribute.getCategoryId());
        productAttributeDTO.setSort(productAttribute.getSort());
        productAttributeDTO.setCreateTime(productAttribute.getCreateTime());
        productAttributeDTO.setUpdateTime(productAttribute.getUpdateTime());
        
        return productAttributeDTO;
    }
    
    /**
     * 将ProductAttributeDTO转换为ProductAttribute实体
     * @param productAttributeDTO ProductAttributeDTO
     * @return ProductAttribute实体
     */
    public ProductAttribute toEntity(ProductAttributeDTO productAttributeDTO) {
        if (productAttributeDTO == null) {
            return null;
        }
        
        ProductAttribute productAttribute = new ProductAttribute();
        productAttribute.setId(productAttributeDTO.getId());
        productAttribute.setName(productAttributeDTO.getName());
        productAttribute.setType(productAttributeDTO.getType());
        productAttribute.setCategoryId(productAttributeDTO.getCategoryId());
        productAttribute.setSort(productAttributeDTO.getSort());
        
        return productAttribute;
    }
    
    /**
     * 将ProductAttribute实体列表转换为ProductAttributeDTO列表
     * @param productAttributes ProductAttribute实体列表
     * @return ProductAttributeDTO列表
     */
    public List<ProductAttributeDTO> toDTOList(List<ProductAttribute> productAttributes) {
        if (productAttributes == null || productAttributes.isEmpty()) {
            return new ArrayList<>();
        }
        
        List<ProductAttributeDTO> productAttributeDTOs = new ArrayList<>();
        for (ProductAttribute productAttribute : productAttributes) {
            productAttributeDTOs.add(toDTO(productAttribute));
        }
        
        return productAttributeDTOs;
    }
    
    /**
     * 将ProductAttributeDTO列表转换为ProductAttribute实体列表
     * @param productAttributeDTOs ProductAttributeDTO列表
     * @return ProductAttribute实体列表
     */
    public List<ProductAttribute> toEntityList(List<ProductAttributeDTO> productAttributeDTOs) {
        if (productAttributeDTOs == null || productAttributeDTOs.isEmpty()) {
            return new ArrayList<>();
        }
        
        List<ProductAttribute> productAttributes = new ArrayList<>();
        for (ProductAttributeDTO productAttributeDTO : productAttributeDTOs) {
            productAttributes.add(toEntity(productAttributeDTO));
        }
        
        return productAttributes;
    }
}